<?php
// 应用公共文件

/**
 * 组装分页方法
 * @param array $lists
 * @return array int[]
 */
function get_list_pages($lists)
{
    return [
        'total' => (int)$lists['total'],
        'page'  => (int)$lists['current_page'],
        'size'  => (int)$lists['per_page'],
        'last'  => (int)$lists['last_page']
    ];
}

/**
 * 系统加密
 * @param string $data 加密参数
 * @param string $key 加密秘钥
 * @param int $expire 过期时间
 * @return string
 */
function encrypt($data, $key = '', $expire = 0)
{
    $key         = md5(empty($key) ? 'shop.langting.top' : $key);
    $data        = base64_encode($data);
    $x           = 0;
    $data_length = strlen($data);
    $key_length  = strlen($key);
    $char        = '';

    for ($i = 0; $i < $data_length; $i++) {
        if ($x == $key_length) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }

    $str = sprintf('%010d', $expire ? $expire + time() : 0);

    for ($i = 0; $i < $data_length; $i++) {
        $str .= chr(ord(substr($data, $i, 1)) + (ord(substr($char, $i, 1))) % 256);
    }

    return str_replace(array('+', '/', '='), array('-', '_', ''), base64_encode($str));
}

/**
 * 系统解密
 * @param string $data 解密字符串
 * @param string $key 解密秘钥
 * @return mixed
 */
function decrypt($data, $key = '')
{
    $key  = md5(empty ($key) ? 'shop.langting.top' : $key);
    $data = str_replace(array('-', '_'), array('+', '/'), $data);
    $mod4 = strlen($data) % 4;
    if ($mod4) {
        $data .= substr('====', $mod4);
    }
    $data   = base64_decode($data);
    $expire = substr($data, 0, 10);
    $data   = substr($data, 10);

    if ($expire > 0 && $expire < time()) {
        return '';
    }
    $x           = 0;
    $data_length = strlen($data);
    $key_length  = strlen($key);
    $char        = $str = '';

    for ($i = 0; $i < $data_length; $i++) {
        if ($x == $key_length) $x = 0;
        $char .= substr($key, $x, 1);
        $x++;
    }

    for ($i = 0; $i < $data_length; $i++) {
        if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
            $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
        } else {
            $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
        }
    }

    return base64_decode($str);
}

/**
 * md5+ 加密
 *
 * @param string $str 字符串
 * @return string 返回 md5+
 */
function md5_plus($str)
{
    return $str === '' ? '' : md5(md5($str) . 'shop.langting.top');
}
